Personnaliser Securimage

(SOURCE DE CETTE PAGE WEB)

Cette page explique comment changer le look de Securimage en modifiant sa configuration.

Il y a deux endroits à partir desquels on peut changer le look de Securimage, soit dans la fonction __construct() dans securimage.php, ou directement dans le fichier securimage_show.php (recommandé). Les exemples ci-dessous vont vous montrer comment modifier les paramètres du fichier securimage_show.php

Modification des couleurs

La définition des couleurs avec Securimage est flexible et facile, toutes les couleurs sont définies en utilisant la classe Securimage_Color. Les couleurs peuvent être données en valeurs RGB, avec des valeurs hexadécimales ou en HTML. Les exemples ci-dessous montrent chaque méthode.

1 // utilisation des valeurs RGB dans la plage 0 - 255
2 // paramétrage de la couleur en bleu R=0, G=0, B=255
3 $color = new Securimage_Color(0, 0, 255);
4  
5// Même chose en utilisant les valeurs hexadécimales
6 $color = new Securimage_Color(0, 0, 0xff);
7  
8 // utilisation des codes couleurs HTML/CSS
9 // paramétrage de la couleur en un bleu clair en utilisant le code couleur HTML
10 $color = new Securimage_Color('#3388FF');
11  
12 // même chose mais en utilisant le triplet RGB
13 $color = new Securimage_Color('#38F');

L'exemple suivant montre quelles sont les propriétés à utiliser pour changer de fond, texte et couleur de lignes.

1 // dans le fichier securimage_show.php
2  
3 // paramétrage de la couleur de fond en blanc
4 $img->image_bg_color = new Securimage_Color('#ffffff');
5  
6 // paramétrage de la couleur du texte en gris foncé
7 $img->text_color = new Securimage_Color('#525252');
8  
9 // paramétrage de la couleur des lignes en gris foncés pour qu'elles se mélangent avec le texte
10 $img->line_color = new Securimage_Color('#525252');

Utilisation de Fonds

Securimage permet d'utiliser facilement un fond statique unique sur tous vos captchas ou de choisir un fond aléatoire à partir d'un répertoire à utiliser dans chaque image. Notez que le fond sera plus visible et fonctionnera mieux quand il a la même taille que votre image (230×80 par défaut), cependant il sera redimensionné pour s'adapter à l'image même s'ils n'ont pas la même taille.

Pour utiliser un fond simple sur chacune des images, éditez la dernière ligne du fichier securimage_show.php et écrivez le chemin complet de l'image de fond dans la fonction show().

1 // dans le fichier securimage_show.php - c'est la dernière ligne
2  
3 // insèrer le lien de l'image de fond dans show() - il faut utiliser le chemin complet
4 $img->show( '/home/user/public/securimage/backgrounds/image.png' );
5  
6 // sur un serveur windows
7 $img->show( 'C:\\inetpub\\wwwroot\\securimage\\backgrounds\\image.png' );

Au lieu de montrer la même image, Securimage fournit un répertoire avec des arrière-plans dans le dossier Securimage où on peut mettre des fichiers image png, jpg, ou gif ; l'un d'entre eux sera choisi aléatoirement à chaque affichage d'une image CAPTCHA.

1 // dans le fichier securimage_show.php
2  
3 // définissez le dossier contenant le répertoire avec les images de fond pour Securimage
4 // utiliser dirname permettra de trouver automatiquement dans quel dossier se trouve Securimage
5 $img->background_directory = dirname(__FILE__) . '/backgrounds/';

Securimage est fourni avec quelques arrière-plans, mais vous pouvez ajouter les vôtres ; autant que vous le souhaitez et ils seront utilisés.

Changer la difficulté

Les deux facteurs importants pour rendre difficile les résolutions automatiques des captchas par des programmes informatiques sont les distorsions du code et le dessin des lignes aléatoires sur l'image. Si les caractères sont suffisamment déformés, les programmes n'auront pas beaucoup de succès en tentant de retrouver la valeur correcte. Dessiner des lignes aléatoires sur toute l'image permet de tromper les programmes ; en suivant les lignes aléatoires ils peuvent se tromper en pensant qu'elles font parties d'une lettre ou d'un chiffre et de ce fait ils n'arriveront pas à trouver la valeur juste.

D'autre part, le propriétaire du site peut ne pas souhaiter faire une image trop difficile à lire pour ses visiteurs et de ce fait diminuer la difficulté des paramètres ou même les enlever.

Le niveau de distorsion est contrôlé par la propriété perturbation et le nombre de lignes se trouvant sur l'image (s'il y en a) par la propriété num_lines.

1 // dans le fichier securimage_show.php
2  
3 // définir comment les caractères seront déformés
4 $img->perturbation = 0.75; // c'est la valeur par défaut
5  
6 // très grande distorsion, ce n'est pas recommandé d'aller au-delà de 1
7 $img->perturbation = 1;
8  
9 // pas de distorsion, la police de caractère sera visible de la même façon qu'elle a été conçue
10 $img->perturbation = 0;
11  
12 // tracer des lignes sur l'image
13 $img->num_lines = 10; // un grand nombre de ligne sur l'image
14  
15 $img->num_lines = 0; // pas de ligne, juste le code

Polices d'écriture personnalisées

Vous pouvez utiliser une police d'écriture différente de celle qui est livrée avec Securimage pour obtenir un look unique pour vos images. Des polices plus complexes peuvent être utilisées pour rendre la résolution automatique du captcha plus difficile. Securimage peut charger n'importe laquelle tant que c'est une police TTF.

Pour utiliser votre propre police, envoyez le fichier TTF dans le dossier Securimage (où la police par défaut AHGBold.ttf est située). Pour éviter des problèmes lors du chargement de la police, assurez-vous que son nom n'a pas d'espaces ou autres caractères spéciaux et que le fichier se termine par l'extension .ttf. Le chargement des polices est contrôlé par la propriété ttf_file.

1 // dans le fichier securimage_show.php
2  
3 // définir la police d'écriture personnalisée
4 $img->ttf_file = $img->basepath . '/fontfile.ttf';

Si la police d'écriture est envoyée dans le dossier Securimage, utilisez la propriété basepath pour indiquer le chemin du fichier. Le chemin de base est automatiquement enregistré et pointe sur le dossier Securimage. Si vous avez placé la police ailleurs, vous devez utiliser le chemin absolu vers le fichier de police sinon il ne se chargera pas correctement.

Ajout d'une signature

Une signature est un petit morceau de texte qui apparaît dans le coin inférieur droit de chaque image captcha générée. Une signature peut être un nom de domaine, une phrase courte ou un autre texte que l'on souhaite afficher sur l'image.

L'exemple suivant montre comment afficher une signature et changer sa couleur.

1 // dans le fichier securimage_show.php
2  
3 // définir "tondomaine.com" comme texte de la signature et sa couleur en noir
4 $img->image_signature = 'tondomaine.com';
5 $img->signature_color = new Securimage_Color('#000000');

Réglage de la taille de l'image

Pour changer la taille d'une image captcha, les propriétés image_width et image_height sont utilisées. Pour éviter que le texte sorte de l'image, la largeur doit être 2,7 fois supérieure à la hauteur. Le meilleur moyen de calculer la taille est de choisir une hauteur et de la multiplier par 2,875 ou de choisir une largeur et de la multiplier par 0,35.

1 // dans le fichier securimage_show.php
2  
3 // paramétrage de la largeur et calcul de la hauteur optimale
4 $img->image_width = 260;
5 $img->image_height = (int)($img->image_width * 0.35);
6  
7 // paramétrage de la hauteur et calcul de la largeur optimale
8 $img->image_height = 50;
9 $img->image_width = (int)($img->image_height * 2.875);

Les règles de multiplication utilisées ci-dessus ne sont que des lignes directrices, vous pouvez expérimenter avec différentes hauteurs et largeurs pour voir ce qui fonctionne le mieux avec la mise en perturbation choisie et la police utilisée.

Changer le jeu de caractère

Le caractère par défaut utilisé par Securimage est un sous-ensemble de la gamme [a-z, A-Z, 0-9], avec les caractères ambigüs exclus de l'ensemble. Cela permet de réduire la frustration des utilisateurs car certains caractères ressemblent beaucoup à d'autres, en particulier avec certaines polices et des niveaux plus élevés de distorsion. Les caractères exclus sont I, J, O, Q, i, j, o, q, 0 (zéro) et 1 (un).

Le jeu de caractères peut être spécifié en utilisant une chaîne de caractères à inclure grâce à la propriété charset. Spécifier le même caractère plus d'une fois signifie seulement qu'il a une plus grande probabilité d'être sélectionné et peut apparaïtre plus fréquemment que les autres caractères.

1 // dans le fichier securimage_show.php
2  
3 // utiliser uniquement les lettres majuscule de A à Z pour le code du captcha
4 $img->charset = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
5  
6 // un captcha uniquement numérique
7 $img->charset = '0123456789';
8  
9 // lettres en minuscule et chiffres en excluant les caractères ambigüs
10 $img->charset = 'abcdefghklmnprstuvwyz23456789';

Rendre les propriétes aléatoires

Pour rendre plus difficile la résolution des captchas de votre site par les programmes, certaines valeurs peuvent être randomisées pour les dissuader de faire des hypothèses sur votre image. Cette exemple montre comment utiliser la fonction php rand() pour rendre aléatoires les propriétés d'une image.

1 // dans le fichier securimage_show.php
2  
3 // générer un code contenant entre 4 et 6 caractères
4 $img->code_length = rand(4, 6);
5  
6 // changer le nombre de ligne dessiné sur l'image
7 $img->num_lines = rand(3, 10);
Traduit et mis en page par aventurier19